// $codepro.audit.disable packageJavadoc
package sil.mod;

import iface.Modificator;
/**
 * This class contains a collection of attack modifiers.
 * 
 * @author Marcus Lindner
 * @author Joana Otetelisanu
 */
public interface AttackModifiers {

    /**
     * Range modifiers.
     * 
     * @author Marcus Lindner
     * @author Joana Otetelisanu
     */
    public enum RangeModificator implements Modificator {
	/** Point blank */
	POINT_BLANK(+1, "Point Blank"),
	/** Short */
	SHORT(0, "Short Range"),
	/** Medium */
	MEDIUM(-1, "Medium Range"),
	/** Long */
	LONG(-2, "Long Range"),
	/** Long with sniper */
	LONG_SNIPER(-1,"Long Range with Sniper"),
	/** Extreme */
	EXTREME(-3, "Extreme Range"),
	/** Extreme with sniper*/
	EXTREME_SNIPER(-2, "Extreme Range with Sniper"),
	/** Optimal range*/
	OPTOMAL_RANGE(0, "Optimal Range"), 
	/** Sub-Optimal range*/
	SUP_OPTIMAL_RANGE(-1, "Sup Optimal Range"),
	/** Sub-Optimal range with sniper*/
	SUP_OPTIMAL_RANGE_SNIPER(0, "Sub Optimal Range With Sniper"),
	/** Unlimited range*/
	UNLIMTED(-2, "Unlimited Range"),
	/** Unlimited range with sniper*/
	UNLIMTED_SNIPER(-1, "Unlimited Range with Sniper");

	/**
	 * Field modificator.
	 */
	private final int modificator;
	/**
	 * Field description.
	 */
	private final String description;

	/**
	 * Constructor for RangeModificator.
	 * @param mod int
	 * @param desc String
	 */
	private RangeModificator(int mod, String desc) {
	    this.modificator = mod;
	    this.description = desc;
	}

	/**
	 * {@inheritDoc}
	 * @return int
	 */
	@Override
	public int getModificator() {
	    return this.modificator;
	}

	/**
	 * {@inheritDoc}
	 * @return String
	 */
	@Override
	public String toString(){
	    final String text = this.description + "( " + this.modificator + " )";
	    return text;
	}
    }
    
    /**
     * Cover modifiers.
     * 
     * @author Marcus Lindner
     * @author Joana Otetelisanu
     */
    public enum CoverModificator implements Modificator {
	/** In the open*/
	IN_THE_OPEN(+1, "In the Open"),
	/** Some cover*/
	SOME_COVER(0, "Some cover"),
	/** Some cover behind a solid object*/
	SOLID_SOME_COVER(-1, "Some Partial cover"),
	/** Partial cover*/
	PARTIAL_COVER(-2, "Partial Cover"),
	/** Partial cover behind a solid object*/
	SOLID_PARTIAL_COVER(-2, "Solid Partial Cover"),
	/** Full cover*/
	FULL_COVER(-2, "Full Cover");

	/**
	 * Field modificator.
	 */
	private final int modificator;
	/**
	 * Field description.
	 */
	private final String description;

	/**
	 * Constructor for CoverModificator.
	 * @param mod int
	 * @param desc String
	 */
	private CoverModificator(int mod, String desc) {
	    this.modificator = mod;
	    this.description = desc;
	}
	
	/**
	 * {@inheritDoc}
	 * @return int
	 */
	@Override
	public int getModificator() {
	    return this.modificator;
	}

	/**
	 * {@inheritDoc}
	 * @return String
	 */
	@Override
	public String toString(){
	    final String text = this.description + "( " + this.modificator + " )";
	    return text;
	}
    }
}
